import axios from "axios";
import router from "@/router";
import { Notify } from "vant";
import store from "@/store";
import { refreshtoken } from "@/api/user";
// 创建axios实例.返回一个实例,本质还是axios,这样的好处是可以根据不同的需求,,封装不同的请求;灵活
const request = axios.create({
  baseURL: "http://toutiao.itheima.net",

  timeout: 20000,
});

// 添加请求拦截器
request.interceptors.request.use(
  function (config) {
    // 在发送请求之前做些什么
    // console.log(1);
    // 判断是否有token
    // console.log(store.state.token);
    if (
      store.state.token?.length > 0 &&
      config.headers.Authorization == undefined
    ) {
      config.headers.Authorization = `Bearer ${store.state.token}`;
    }
    // console.log(config);

    return config;
  },
  function (error) {
    // 对请求错误做些什么

    return Promise.reject(error);
  }
);

// 添加响应拦截器
request.interceptors.response.use(
  function (response) {
    // 对响应数据做点什么
    // http响应状态码为2xx, 3xx就进入这里

    // console.log(3);

    return response;
  },
  async function (error) {
    // 对响应错误做点什么
    // http响应状态码4xx, 5xx报错进入这里
    // console.log(4);
    console.dir(error);
    if (error.response.request.status == "401") {
      console.log("401");
      //  身份认证失败
      // router.push
      // undefined
      console.log("身份认证失败");
      // localStorage.setItem("token", "");

      // Notify({ type: "warning", message: "身份认证失败" });
      // const res = await refreshtoken();
      // console.log(res);
      // //   // 1. 更新token在本地
      // localStorage.setItem("token", res.data.data.token);
      // // 2. 更新新的token在请求头里
      // error.config.headers.Authorization = `Bearer ${res.data.data.token}`;
      // console.log("token已刷新");
      // // 结果我们要return回原本逻辑页面调用地方-还是return回去一个Promise对象
      // //重新发送上一次请求并return
      // return axios(error.config);

      //返回上一次访问的页面
      // 清除所有localstoge
      localStorage.clear();
      Notify({ type: "warning", message: "身份认证失败" });

      router.replace(`/login?path=${router.currentRoute.fullPath}`);

      // setTimeout(() => {
      //   router.replace("/login");
      // }, 2000);
    } else if (
      error.response.request.status == "500" &&
      error.config.url === "/v1_0/authorizations" &&
      error.config.method === "put"
    ) {
      console.log("500");

      // 清除本地所有token 清除所有localstoge
      localStorage.clear();

      router.replace("/login");
      Notify({ type: "warning", message: "身份认证失败" });
      return;
    }
    return Promise.reject(error);
  }
);

// export default request;

export default ({
  url,
  method = "GET",
  params = {},
  data = {},
  headers = {},
}) => {
  return request({
    url,

    method,

    params,

    data,

    headers,
  });
};
